package dao;
	
import java.sql.SQLException;
import java.util.List;

import om.Bewertung;
import om.Orte;
import om.Region;
import om.Route;
	
	
import org.hibernate.HibernateException;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;


	
/**
 * Die Klasse Region. Alle Interaktionen mit der Datenbank
 * in Bezug auf die Entity Bean Region sollten in dieser Klasse behandelt werden.
 */


public class RegionDao extends HibernateDaoSupport {
	
	/**
	 <li>  Rueckgabewert sind alle Regionen aus der Datenbank
	 * @return eine Liste der Regionen
	 * @see Region
	 */	
	public List<Region> getAllRegionen(){
		HibernateTemplate template = getHibernateTemplate();
		return template.loadAll(Region.class);
	}

	
	/**
	 <li>  Rueckgabewert ist eine einzelne Region anhand seines Primaerschluessels
	 * @param id ist der Primaerschluessel {@link Region}
	 * @return Ein Objekt vom Typ Region
	 */
	public Region findById(int id) {
		HibernateTemplate template = getHibernateTemplate();
		return (Region) template.get(Region.class, id);
	}
	
	
	/**
	
	 * @param suche Eine vom User eingegebene Suche (wildcards)
	 * @return {@link Region} Alle Regionen deren Namen die Wildcard-Suche beinhalten
	 */
	@SuppressWarnings("unchecked")
	public List<Region> findRegionenBySearch(final String suche){
		final String suche1;
		suche1="%"+suche+"%";
		HibernateTemplate template = getHibernateTemplate();
		return (List<Region>) template.execute(new HibernateCallback<Object>() {
	
			@Override
			public Object doInHibernate(final org.hibernate.Session session)
					throws HibernateException, SQLException {
	
				final List<Region> list = (List<Region>) session.createCriteria(Region.class)
						.add(Restrictions.ilike("region", suche1))
						.list();
				return list;
			}
		});
	}
	
	
	/**
	 * Speichert ein {@link Region} Objekt
	 * @param region Objekt vom Type Region
	 * @return Ein Objekt vom Typ Region
	 */
	public Region save(Region region)
	{
		HibernateTemplate template = getHibernateTemplate();
		template.saveOrUpdate(region);
		return region;
	}
	

}
